জাভা জেনেরিক্স (Java Generics) এবং Java Collections Framework একে অপরের সাথে ঘনিষ্ঠভাবে সম্পর্কিত। Java Collections Framework জাভার এক সেট ক্লাস এবং ইন্টারফেস সরবরাহ করে যা ডেটা স্টোর এবং ম্যানেজ করার জন্য ব্যবহৃত হয়। Generics Collections Framework-কে আরও শক্তিশালী, নিরাপদ এবং কার্যকর করে তোলে।
Java Collections Framework এবং Generics এর ভূমিকা
- Generics এর আগে Collection Framework
Generics ব্যবহার করার আগে, Collections Framework-এ ডেটা ইনসার্ট এবং রিট্রাইভ করার সময় টাইপ কাস্টিং করতে হতো। এটি runtime errors-এর ঝুঁকি বাড়াতো।
// Without Generics
import java.util.*;
public class Main {
public static void main(String[] args) {
List list = new ArrayList(); // Non-generic List
list.add("Hello");
list.add(10); // Allowed, no compile-time error
for (Object obj : list) {
String str = (String) obj; // Runtime error for non-String objects
System.out.println(str);
}
}
}
সমস্যা:
- Compile-time টাইপ চেকিং অনুপস্থিত।
- Runtime টাইপ কাস্টিং ব্যর্থ হতে পারে এবং
ClassCastExceptionঘটতে পারে।
- Generics এর সাথে Collection Framework
Generics ব্যবহার করে, Collection Framework টাইপ সেফটি নিশ্চিত করে এবং টাইপ কাস্টিংয়ের প্রয়োজনীয়তা দূর করে।
// With Generics
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>(); // Generic List
list.add("Hello");
// list.add(10); // Compile-time error
for (String str : list) {
System.out.println(str); // No type casting needed
}
}
}
সুবিধা:
- Compile-time টাইপ চেকিং নিশ্চিত হয়।
- কোড নিরাপদ ও রিডেবল হয়।
Generics এবং Collections Framework-এর সম্পর্কিত উদাহরণ
1. Generics ব্যবহার করে List
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
for (Integer num : numbers) {
System.out.println(num);
}
}
}
2. Generics ব্যবহার করে Map
import java.util.*;
public class Main {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("One", 1);
map.put("Two", 2);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
}
}
Common Collection Interfaces এবং Generics
- List
ArrayList<E>,LinkedList<E>ইত্যাদি।- উদাহরণ:
List<String> list = new ArrayList<>();
- Set
HashSet<E>,TreeSet<E>ইত্যাদি।- উদাহরণ:
Set<Integer> set = new HashSet<>();
- Map<K, V>
HashMap<K, V>,TreeMap<K, V>ইত্যাদি।- উদাহরণ:
Map<String, Integer> map = new HashMap<>();
- Queue
PriorityQueue<E>,LinkedList<E>ইত্যাদি।- উদাহরণ:
Queue<String> queue = new LinkedList<>();
- Deque
ArrayDeque<E>,LinkedList<E>ইত্যাদি।- উদাহরণ:
Deque<Double> deque = new ArrayDeque<>();
Generics Collections-এর সুবিধা
- Type Safety নিশ্চিত করে
Collection Framework-এ যে টাইপ ডেটা যোগ করা হবে, Generics সেটি compile-time এ চেক করে। ভুল টাইপ অ্যাড করলে compile-time error দেখায়। - Runtime Errors প্রতিরোধ করে
Generics টাইপ সংক্রান্ত runtime errors (যেমনClassCastException) প্রতিরোধ করে। - কোড রিডেবল এবং ম্যানেজযোগ্য করে
Generics-এর কারণে টাইপ কাস্টিংয়ের প্রয়োজন হয় না, যা কোডকে আরও পরিষ্কার ও সহজ করে তোলে।
Wildcard Generics এবং Collections
Generics-এর সাথে wildcard (?) ব্যবহার করে বিভিন্ন টাইপ হ্যান্ডেল করা যায়।
উদাহরণ:
import java.util.*;
public class Main {
public static void printList(List<?> list) {
for (Object obj : list) {
System.out.println(obj);
}
}
public static void main(String[] args) {
List<Integer> intList = List.of(1, 2, 3);
List<String> strList = List.of("A", "B", "C");
printList(intList); // Works with any type
printList(strList);
}
}
Bounded Wildcards
Upper Bound (
<? extends T>)
এটি নির্ধারণ করে যে Generics টাইপ হবেTবা তার সাবটাইপ।public static void printNumbers(List<? extends Number> list) { for (Number num : list) { System.out.println(num); } }Lower Bound (
<? super T>)
এটি নির্ধারণ করে যে Generics টাইপ হবেTবা তার সুপারটাইপ।public static void addNumbers(List<? super Integer> list) { list.add(10); // Allowed }
- Java Collections Framework এবং Generics একসাথে টাইপ সেফটি এবং কোড রিডেবিলিটি নিশ্চিত করে।
- Generics ব্যবহার করলে compile-time টাইপ চেকিং সম্ভব হয়, যা runtime errors কমায়।
- Collection Framework-এর সাথে Generics ব্যবহারের মাধ্যমে ডেটা ম্যানিপুলেশন সহজ, কার্যকর, এবং নিরাপদ হয়।
Content added By
Read more